import requests  # 发送网络请求，获取 HTML 等信息
from bs4 import BeautifulSoup  # 解析 HTML 信息，提取需要的信息
import time  # 控制爬虫速度，防止过快被封IP


headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
    # 添加浏览器头部信息，模拟请求
}

def get_info(url):
    # 参数 url ：要爬取的网页地址
    web_data = requests.get(url, headers=headers)  # 发送网络请求，获取 HTML 等信息
    soup = BeautifulSoup(web_data.text, 'lxml')  # 解析 HTML 信息，提取需要的信息

    # 通过 CSS 选择器定位到需要的信息
    ranks = soup.select('span.pc_temp_num')
    titles = soup.select('div.pc_temp_songlist > ul > li > a')
    times = soup.select('span.pc_temp_tips_r > span')
    hrefs = soup.select_one('a.pc_temp_songname').attrs['href']

    # for 循环遍历每个信息，并将其存储到字典中
    for rank, title, time,href in zip(ranks, titles, times,hrefs):
        data = {
            "rank": rank.get_text().strip(),  # 歌曲排名
            "singer": title.get_text().replace("\n", "").replace("\t", "").split('-')[1],  # 歌手名
            "song": title.get_text().replace("\n", "").replace("\t", "").split('-')[0],  # 歌曲名
            "time": time.get_text().strip(),# 歌曲时长
            "href":hrefs
        }
        print(data)  # 打印获取到的信息
        # web_href = requests.get(data.get("href"), headers=headers)  # 发送网络请求，获取 HTML 等信息
        # soup_href = BeautifulSoup(web_href.text, 'lxml')  # 解析 HTML 信息，提取需要的信息
        # print(soup_href)


if __name__ == '__main__':
    urls = ["https://www.kugou.com/yy/rank/home/{}-8888.html".format(str(i)) for i in range(1, 24)]
    # 构造要爬取的页面地址列表
    for url in urls:
        get_info(url)  # 调用函数，获取页面信息
        time.sleep(1)  # 控制爬虫速度，防止过快被封IP